﻿/***************************************************************************
	Copyright (C) 2010 RapidWebDev Organization (Author: Eunge, Legal Name: Jian Liu, Email: eunge.liu@gmail.com)

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ***************************************************************************/

using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BaoJianSoft.Web.Extensions.Controls;
using BaoJianSoft.Web.Extensions.Properties;

namespace BaoJianSoft.Web.Extensions.DynamicPages
{
    /// <summary>
    /// Excel Document instance.
    /// </summary>
    public sealed class ExcelDocument
    {
        /// <summary>
        /// Construct Excel Document instance.
        /// </summary>
        /// <param name="worksheetName"></param>
        public ExcelDocument(string worksheetName)
        {
            this.WorksheetName = worksheetName;
        }

        #region Primary Fields

        private string headerText;
        private string permissionKey;

        #endregion

        /// <summary>
        /// Sets/gets web page header text.
        /// </summary>
        public string HeaderText
        {
            get { return WebUtility.FormatDisplayText(this.headerText); }
            set { this.headerText = value; }
        }

        /// <summary>
        /// Sets/gets web page access permission key.
        /// </summary>
        public string PermissionKey
        {
            get { return WebUtility.FormatDisplayText(this.permissionKey); }
            set { this.permissionKey = value; }
        }
        /// <summary>
        /// Sets/gets entity type which the upload excel document records are parsed to.
        /// </summary>
        public Type EntityType { get; set; }

        /// <summary>
        /// Gets reading excel worksheet name.
        /// </summary>
        public string WorksheetName { get; private set; }

        /// <summary>
        /// Sets/gets excel template file download URL.
        /// </summary>
        public string ExcelTemplateDownloadUrl { get; set; }

        /// <summary>
        /// Sets/gets excel detail panel configuration.
        /// </summary>
        public ExcelDetailPanelConfiguration DetailPanel { get; set; }

        /// <summary>
        /// Gets enumerable fields of excel document.
        /// </summary>
        public IEnumerable<ExcelField> Fields { get; set; }

        /// <summary>
        /// Gets primary key field.
        /// </summary>
        public ExcelField PrimaryKeyField
        {
            get
            {
                ExcelField primaryKey = this.Fields.Where(f => f.IsPrimaryKey).FirstOrDefault();
                if (primaryKey == null)
                {
                    throw new InvalidProgramException(string.Format(Resources.PrimaryKeyFieldNotConfigured, this.WorksheetName));
                }

                return primaryKey;
            }
        }
    }
}
